#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

int main() 
{
    pid_t pid;
    int var = 0;  // 父进程初始变量

    pid = fork();
    if (pid < 0) 
    {
        perror("fork failed");
        exit(EXIT_FAILURE);
    } 
    // 子进程逻辑
    else if (pid == 0) 
    {
        int child_var = 0;  // 子进程独立变量
        while (1) 
        {
            // 输出子进程变量地址和当前值
            printf("子进程独立变量 - 变量地址: %p, 当前值: %d\n", &child_var, child_var);
            printf("子进程全局变量 - 变量地址: %p, 当前值: %d\n", &var, var);
            child_var++;  // 每次加1
            var++;  // 每次加1
            sleep(1);  // 延迟1秒，避免输出过快
        }
    } 
    // 父进程逻辑
    else 
    {
        while (1) 
        {
            // 输出父进程变量值和地址
            printf("父进程 - 变量值: %d, 变量地址: %p\n\n\n", var, &var);
           
            sleep(1);  // 延迟1秒
        }
   
        wait(NULL);  // 回收子进程（理论上的收尾）
    }

    return 0;
}
